<?php

namespace app\redis\controller;

use think\App;
use think\Controller;

use think\Session;

class Lists extends Controller
{
    private $redis;
    public function __construct()
    {
        parent::__construct();
        $this->redis = new \Redis();
        $this->redis->connect('127.0.0.1','6379');
    }

    /**
     * 从左侧压入
     * 如果key不存在则创建
     */
    public function lpush()
    {
        $this->redis->lPush('order_36','苹果');
        $this->redis->lPush('order_36','橘子');
        $this->redis->lPush('order_36','香蕉');
    }

    public function lpush2()
    {
        $this->redis->lPush('nameList','张三');
        $this->redis->lPush('nameList','李四');
        $this->redis->lPush('nameList','王五');
    }

    public function lpush3()
    {
        $this->redis->lPush('engList','morning','hello','morning','hello','morning');
    }

    public function lrange3()
    {
        $result = $this->redis->lRange('engList',0,-1);
        dump($result);
    }

    /**
     * 弹出key中的值，（弹出哪个元素，弹出几个 正整数从左往右，负数从右往左，0 全部删除）
     */
    public function lrem()
    {
        echo  $this->redis->lRem('engList','hello','0')."<br/>";
        $this->redis->lRange('engList',0,-1);
    }

    /**
     * 获取长度
     */
    public function llen()
    {
        echo $this->redis->lLen('engList');
    }

    /**
     * 根据下标返回键值
     */
    public function lindex()
    {
        echo $this->redis->lIndex('engList','1');
    }

    public function lrangeAll()
    {
        $res1 = $this->redis->lRange('order_36',0,-1);
        $res2 = $this->redis->lRange('nameList',0,-1);
        dump($res1);
        dump($res2);

    }

    /**
     * 同lpush一样，但是如果指定的key不存在，则不会创建
     */
    public function lpushx()
    {
        echo $this->redis->lPushx('order_55','1');
    }

    /**
     * 读取
     */
    public function lrange()
    {
        dump($this->redis->lRange('order_36',0,-1));
    }

    /**
     * 从右侧压入
     * 返回表的长度
     */
    public function rpush()
    {
        echo $this->redis->rPush('order_36','15');
    }

    public function rpushx()
    {
        echo $this->redis->rPushx('order_66','25');
    }

    /**
     * 移除（左侧）头元素，并返回该元素
     */
    public function lpop()
    {
        echo $this->redis->lpop('order_36');
    }

    /**
     * 移除（右侧）尾元素，并返回该元素
     */
    public function rpop()
    {
        echo $this->redis->rPop('order_36');
    }

    /**
     * 弹出srcKey最后一个元素（最右边的，也就是第一个压进去的元素），并将该元素压入到dstKey，成为desKey的头元素（最左面）
     * 结果返回srcKey弹出的元素
     * 这是一个原子操作
     */
    public function rpoplpush()
    {
        echo $this->redis->rpoplpush('order_36','nameList');
    }

    /**
     * 在某个值的前面或后面加入值，没有pivot则不执行，没有key也不执行
     */
    public function linsert()
    {
        echo $this->redis->lInsert('order_36','BEFORE','芒果','水蜜桃');
    }

    /**
     * 对已经存在的键值进行重新设置，如果不存在返回错误
     */
    public function lset()
    {
        echo $this->redis->lSet('order_36',0,2);
    }

    /**
     * 只用做保留选定范围内的value，类似PHP的substr key,起始键值，保留个数
     */
    public function ltrim()
    {
        echo $this->redis->ltrim('order_36',1,3);
    }

    /**
     *  弹出key中的首个值，等待时间可设置
     */
    public function blpop()
    {
        $res = $this->redis->blPop('order_36',100);
        dump($res);
    }

    /**
     * 功能同上相反，弹出的是最末尾的值
     */
    public function brpop()
    {
        $res = $this->redis->brPop('order_36',100);
    }
    







}